metalink: have a single entry to the metalink module
authorGiuseppe Scrivano <gscrivan@redhat.com>
Tue, 4 Nov 2014 16:33:41 +0000 (17:33 +0100)
committerColin Walters <walters@verbum.org>
Thu, 13 Nov 2014 02:20:28 +0000 (21:20 -0500)
Replace _ostree_metalink_request_async with a synchronous version.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
src/libostree/ostree-metalink.c
src/libostree/ostree-metalink.h
src/libostree/ostree-repo-pull.c

index 00cfb2c82c7471c8550bae98fd3b0661f9ba445a..ee798fa9ccf048072494d5b7d9a610739a9e1147 100644 (file)
@@ -658,33 +658,21 @@ static const GMarkupParser metalink_parser = {
   NULL
 };
 
-void
-_ostree_metalink_request_async (OstreeMetalink         *self,
-                                GCancellable           *cancellable,
-                                GAsyncReadyCallback     callback,
-                                gpointer                user_data)
+typedef struct
 {
-  GTask *task = g_task_new (self, cancellable, callback, user_data);
-  OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
-
-  request->metalink = g_object_ref (self);
-  request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free);
-  request->task = task; /* Unowned */
+  SoupURI               **out_target_uri;
+  GFile                 **out_data;
+  gboolean              success;
+  GError                **error;
+  GMainLoop             *loop;
+} FetchMetalinkSyncData;
 
-  request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL);
-  
-  g_task_set_task_data (task, request, ostree_metalink_request_unref);
-  _ostree_fetcher_stream_uri_async (self->fetcher, self->uri,
-                                    self->max_size, cancellable,
-                                    on_retrieved_metalink, task);
-}
-
-gboolean
-_ostree_metalink_request_finish (OstreeMetalink         *self,
-                                 GAsyncResult           *result,
-                                 SoupURI               **out_target_uri,
-                                 GFile                 **out_data,
-                                 GError                **error)
+static gboolean
+ostree_metalink_request_finish (OstreeMetalink         *self,
+                                GAsyncResult           *result,
+                                SoupURI               **out_target_uri,
+                                GFile                 **out_data,
+                                GError                **error)
 {
   OstreeMetalinkRequest *request;
 
@@ -703,6 +691,54 @@ _ostree_metalink_request_finish (OstreeMetalink         *self,
     return FALSE;
 }
 
+static void
+on_metalink_fetched (GObject          *src,
+                     GAsyncResult     *result,
+                     gpointer          user_data)
+{
+  FetchMetalinkSyncData *data = user_data;
+
+  data->success = ostree_metalink_request_finish ((OstreeMetalink*)src,
+                                                  result,
+                                                  data->out_target_uri,
+                                                  data->out_data,
+                                                  data->error);
+  g_main_loop_quit (data->loop);
+}
+
+gboolean
+_ostree_metalink_request_sync (OstreeMetalink        *self,
+                               GMainLoop             *loop,
+                               SoupURI               **out_target_uri,
+                               GFile                 **out_data,
+                               SoupURI               **fetching_sync_uri,
+                               GCancellable          *cancellable,
+                               GError                **error)
+{
+  OstreeMetalinkRequest *request = g_new0 (OstreeMetalinkRequest, 1);
+  FetchMetalinkSyncData data = { 0, };
+  GTask *task = g_task_new (self, cancellable, on_metalink_fetched, &data);
+
+  data.out_target_uri = out_target_uri;
+  data.out_data = out_data;
+  data.loop = loop;
+  data.error = error;
+  *fetching_sync_uri = _ostree_metalink_get_uri (self);
+
+  request->metalink = g_object_ref (self);
+  request->urls = g_ptr_array_new_with_free_func ((GDestroyNotify) soup_uri_free);
+  request->task = task; /* Unowned */
+
+  request->parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, task, NULL);
+
+  g_task_set_task_data (task, request, ostree_metalink_request_unref);
+  _ostree_fetcher_stream_uri_async (self->fetcher, self->uri,
+                                    self->max_size, cancellable,
+                                    on_retrieved_metalink, task);
+  g_main_loop_run (loop);
+  return data.success;
+}
+
 SoupURI *
 _ostree_metalink_get_uri (OstreeMetalink        *self)
 {
index 0c26adebcabd5d09dfb8d25a076a303908aef688..6eb59e52303f8e52da123fdc97a6f26b225123ed 100644 (file)
@@ -50,17 +50,13 @@ OstreeMetalink *_ostree_metalink_new (OstreeFetcher  *fetcher,
 
 SoupURI *_ostree_metalink_get_uri (OstreeMetalink         *self);
 
-void _ostree_metalink_request_async (OstreeMetalink         *self,
-                                     GCancellable          *cancellable,
-                                     GAsyncReadyCallback    callback,
-                                     gpointer               user_data);
-
-gboolean _ostree_metalink_request_finish (OstreeMetalink         *self,
-                                          GAsyncResult           *result,
-                                          SoupURI               **out_target_uri,
-                                          GFile                 **out_data,
-                                          GError                **error);
-
+gboolean _ostree_metalink_request_sync (OstreeMetalink        *self,
+                                        GMainLoop             *loop,
+                                        SoupURI               **out_target_uri,
+                                        GFile                 **out_data,
+                                        SoupURI               **fetching_sync_uri,
+                                        GCancellable          *cancellable,
+                                        GError                **error);
 G_END_DECLS
 
 #endif
index 7bd1557e0ec1b8ba3ca8e6ac178f9b1dca1360f0..7a7ed4655a6977ed517a766b2a854892fc90f3e0 100644 (file)
@@ -303,49 +303,6 @@ fetch_uri_contents_utf8_sync (OtPullData  *pull_data,
   return ret;
 }
 
-typedef struct
-{
-  OtPullData             *pull_data;
-  SoupURI               **out_target_uri;
-  GFile                 **out_data;
-  gboolean                success;
-} FetchMetalinkSyncData;
-
-static void
-on_metalink_fetched (GObject          *src,
-                     GAsyncResult     *result,
-                     gpointer          user_data)
-{
-  FetchMetalinkSyncData *data = user_data;
-
-  data->success = _ostree_metalink_request_finish ((OstreeMetalink*)src, result,
-                                                   data->out_target_uri, data->out_data,
-                                                   data->pull_data->async_error);
-  g_main_loop_quit (data->pull_data->loop);
-}
-
-static gboolean
-request_metalink_sync (OtPullData             *pull_data,
-                       OstreeMetalink         *metalink,
-                       SoupURI               **out_target_uri,
-                       GFile                 **out_data,
-                       GCancellable           *cancellable,
-                       GError                **error)
-{
-  FetchMetalinkSyncData data = { 0, };
-
-  data.pull_data = pull_data;
-  data.out_target_uri = out_target_uri;
-  data.out_data = out_data;
-
-  pull_data->fetching_sync_uri = _ostree_metalink_get_uri (metalink);
-  _ostree_metalink_request_async (metalink, cancellable, on_metalink_fetched, &data);
-  
-  g_main_loop_run (pull_data->loop);
-
-  return data.success;
-}
-
 static void
 enqueue_one_object_request (OtPullData        *pull_data,
                             const char        *checksum,
@@ -1387,8 +1344,13 @@ ostree_repo_pull_with_options (OstreeRepo             *self,
                                        OSTREE_MAX_METADATA_SIZE, metalink_uri);
       soup_uri_free (metalink_uri);
 
-      if (!request_metalink_sync (pull_data, metalink, &target_uri, &metalink_data,
-                                  cancellable, error))
+      if (! _ostree_metalink_request_sync (metalink,
+                                           pull_data->loop,
+                                           &target_uri,
+                                           &metalink_data,
+                                           &pull_data->fetching_sync_uri,
+                                           cancellable,
+                                           error))
         goto out;
 
       {